package com.ruoyi.user.service;

import com.ruoyi.common.core.domain.AjaxResult;
import com.ruoyi.system.domain.SpffUsers;
import com.ruoyi.user.dto.LoginFormDTO;

import javax.servlet.http.HttpSession;
import java.util.List;

/**
 * 用户服务接口
 */
public interface IUserService {

    /**
     * 用户登录
     */
    AjaxResult login(LoginFormDTO loginForm, HttpSession session);

    /**
     * 用户退出登录
     */
    AjaxResult logout(HttpSession session);

    /**
     * 检查用户是否存在
     */
    AjaxResult checkUserExists(String username);

    /**
     * 用户注册
     */
    AjaxResult register(SpffUsers user);

    /**
     * 重置密码
     */
    AjaxResult resetPassword(String username, String newPassword);

    /**
     * 获取用户信息
     */
    AjaxResult getUserInfo(Long userId);

    /**
     * 更新用户信息
     */
    AjaxResult updateUserInfo(SpffUsers user);

    /**
     * 更新密码
     */
    AjaxResult updatePassword(Long userId, String oldPassword, String newPassword);

    /**
     * 上传头像
     */
    AjaxResult uploadAvatar(Long userId, String avatarUrl);

    /**
     * 关注用户
     */
    AjaxResult followUser(Long userId, Long targetUserId);

    /**
     * 取消关注用户
     */
    AjaxResult unfollowUser(Long userId, Long targetUserId);

    /**
     * 获取粉丝列表
     */
    AjaxResult getFollowers(Long userId, Integer page, Integer pageSize);

    /**
     * 获取关注列表
     */
    AjaxResult getFollowing(Long userId, Integer page, Integer pageSize);

    /**
     * 获取用户统计数据
     */
    AjaxResult getUserStats(Long userId);

    /**
     * 获取用户列表（分页）
     */
    AjaxResult getUserList(Integer page, Integer pageSize, String keyword);

    /**
     * 搜索用户
     */
    AjaxResult searchUsers(String keyword, Integer page, Integer pageSize);

    /**
     * 根据ID列表批量获取用户信息
     */
    AjaxResult getUserByIds(List<Long> userIds);

    /**
     * 更新用户状态
     */
    AjaxResult updateUserStatus(Long userId, String status);

    /**
     * 更新用户认证状态
     */
    AjaxResult updateUserVerification(Long userId, String isVerified);

    /**
     * 推荐用户
     */
    AjaxResult recommendUsers(Long userId, Integer pageSize);

    /**
     * 检查是否已关注
     */
    AjaxResult isFollowing(Long userId, Long targetUserId);

    /**
     * 更新用户登录时间
     */
    AjaxResult updateLoginTime(Long userId);
}
